home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / AmiVoGL_MDEV.lha / examples / circtxt.c < prev    next >
C/C++ Source or Header  |  1997-08-18  |  3KB  |  169 lines

  1.  
  2. #include <stdio.h>
  3.  
  4. #ifdef SGI
  5. #include "gl.h"
  6. #include "device.h"
  7. #include "hershey.h"
  8. #else
  9. #include "vogl.h"
  10. #include "vodevice.h"
  11. #endif
  12.  
  13. #ifndef TC
  14. #include <math.h>
  15. #else
  16. extern double    sin(), cos();
  17. #endif
  18.  
  19. #define pi 3.1415926535
  20.  
  21. char *fonts[] = {
  22.     "astrology",
  23.     "cursive",
  24.     "futura.l",
  25.     "futura.m",
  26.     "gothic.eng",
  27.     "gothic.ger",
  28.     "gothic.ita",
  29.     "greek",
  30.     "japanese",
  31.     "markers",
  32.     "math.low",
  33.     "math.upp",
  34.     "meteorology",
  35.     "music",
  36.     "cyrillic",
  37.     "script",
  38.     "symbolic",
  39.     "times.g",
  40.     "times.ib",
  41.     "times.i",
  42.     "times.r",
  43.     "times.rb"
  44. };
  45.  
  46. /* ---------------------------------------------------------------------
  47.  * Prototypes:
  48.  */
  49. int main(void);                                        /* circtxt.c       */
  50. void ShowCircularText( double, char *);                /* circtxt.c       */
  51.  
  52. /* ---------------------------------------------------------------------
  53.  * Source Code:
  54.  */
  55.  
  56. /*
  57.  * display all the hershey fonts and demonstrate textang
  58.  */
  59. int main(void)
  60. {
  61.     char    buf[50];
  62.     char    *str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
  63.     char    *str2 = "abcdefghijklmnopqrstuvwxyz" ;
  64.     char    *str3 = "1234567890+-=!@#$%^&*(){}[]" ;
  65.     char    *str4 = "<>,./?~`\\|_BONK,blark" ;
  66.     int    i;
  67.     short    val;
  68.  
  69.     winopen("circtxt");
  70.  
  71.     hleftjustify(1);
  72. /*
  73.     hsetpath("/tmp");
  74.  */
  75.  
  76.     unqdevice(INPUTCHANGE);
  77.     qdevice(KEYBD);
  78.  
  79.     color(BLACK);
  80.     clear();
  81.  
  82.     ortho2(-14.0, 14.0, -14.0, 14.0);    /* define the world space */
  83.  
  84.     for(i = 0; i < 22; i++) {
  85.  
  86.         /*
  87.          * textang is used to specify the orientation of text. As
  88.          * we want the title to come out straight we make sure it is
  89.          * zero each time we go through this loop.
  90.          */
  91.         htextang(0.0);
  92.  
  93.         /*
  94.          * do the title
  95.          */
  96.         color(YELLOW);
  97.         hfont("futura.m");
  98.         sprintf(buf, "This is hershey font %s", fonts[i]);
  99.         hboxtext(-11.0, 12.0, 20.0, 1.0, buf);
  100.  
  101.         /*
  102.          * draw a box around the title
  103.          */
  104.         rect(-11.0, 12.0, 9.0, 13.0);
  105.  
  106.         color(GREEN);
  107.  
  108.         hfont(fonts[i]);        /* grab a font from the table */
  109.  
  110.         htextsize(1.5, 1.5);        /* show the outer ring */
  111.         ShowCircularText(11.0, str1);
  112.  
  113.         htextsize(1.3, 1.3);        /* show the second ring */
  114.         ShowCircularText(8.5, str2);
  115.  
  116.         htextsize(1.1, 1.1);        /* show the third ring */
  117.         ShowCircularText(7.0, str3);
  118.  
  119.         htextsize(0.9, 0.9);        /* show the inside ring */
  120.         ShowCircularText(5.0, str4);
  121.  
  122.         if (qread(&val) == QKEY) {
  123.             gexit();
  124.             exit(0);
  125.         }
  126.  
  127.         color(BLACK);
  128.         clear();
  129.     }
  130.  
  131.     gexit();
  132. }
  133.  
  134. /*
  135.  * ShowCircularText
  136.  *
  137.  *    show a ring of text
  138.  */
  139. void ShowCircularText(
  140.   double r,
  141.   char *str)
  142. {
  143.     double    i, inc, x, y;
  144.     double    a;
  145.  
  146.     inc = 360.0 / (double)strlen(str);
  147.  
  148.     for (i = 0; i < 360.0; i += inc) {
  149.         /*
  150.          * calculate the next drawing position
  151.          */
  152.         x = r * cos(i * pi / 180.0);
  153.         y = r * sin(i * pi / 180.0);
  154.         move2(x, y);
  155.         /*
  156.          * calculate angle for next character
  157.          */
  158.         a = (90 + i);
  159.         /*
  160.          * set the orientation of the next character
  161.          */
  162.         htextang(a);
  163.         /*
  164.          * draw the character
  165.          */
  166.         hdrawchar(*str++);
  167.     }
  168. }
  169.